package com.mwy.springquartzdemo.quartz;

import com.mwy.springquartzdemo.job.MyJob1;
import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;

public class Myquartz {
    public static void main(String[] args) {
        try {
        //通过工厂获取任务调度对象
            Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
            //通过任务builder创建jobdetail实例【其中任务实例class会不断的创建，而不是只创建一次，但是每次调用完之后都会释放】
            JobDetail jobDetail = JobBuilder.newJob(MyJob1.class)     //Myjob1是自定义的实现了Job类的包含工作任务的类
                    .withIdentity("job1","group1")    //定义实例化的job的名字和组名
                    .usingJobData("message","打印日志任务")     //传递参数传递到jobDataMap中（可以放键值对，也可以直接放Map集合）[可选的]
                    .build();
            //通过JobDetail获取jobKey（其中包含了job名称,job组名，job工作任务类）
            JobKey jobKey = jobDetail.getKey();
            String jobKeyName = jobKey.getName();
            String jobKeyGroup = jobKey.getGroup();
            String jobname = jobKey.getClass().getName();
            System.out.println("组名："+jobKeyGroup+"\tjob名称"+jobKeyName+"\tjob工作类名："+jobname);
            //通过触发器builder创建触发器实例
            Trigger trigger = TriggerBuilder.newTrigger()
                    .withIdentity("trigger1","group1")    //定义实例化的触发器的名字和组名
                    .startNow()             //立即开始   （ startAt（Date类） 指定开始时间）
                    .withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(5).repeatForever().withRepeatCount(2))   //定义触发器触发条件（可以重复执行，也可以指定次数）
//                    .withSchedule(CronScheduleBuilder.cronSchedule("0/4 * * * * ?"))     //使用cron表达式来定义触发条件
                    .usingJobData("key值","简单触发器")     //传递参数（可以放键值对，也可以直接放Map集合）【可选的】
                    .build();
            //用任务调度对象将任务和触发条件绑定在一起
            scheduler.scheduleJob(jobDetail,trigger);
            //开启任务调度
            scheduler.start();
            //关闭任务调度
//            scheduler.shutdown();
        } catch (SchedulerException e) {
            e.printStackTrace();
        }
    }
}
